package cn.itsource.basic.util;

import cn.itsource.basic.config.AliPayConfig;
import cn.itsource.pay.domain.AlipayInfo;
import cn.itsource.pay.domain.PayBill;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;

//支付的相关的工具类
public class AliPayUtil {

    public static String aliPay(AlipayInfo alipayInfo, PayBill payBill) {
        try {
            //获得初始化的AlipayClient
            AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.gatewayUrl,
                    alipayInfo.getAppid(), alipayInfo.getMerchant_private_key(),
                    "json", AliPayConfig.charset,
                    alipayInfo.getAlipay_public_key(), AliPayConfig.sign_type);

            //设置请求参数
            AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
            alipayRequest.setReturnUrl(AliPayConfig.return_url);//同步通知地址
            alipayRequest.setNotifyUrl(AliPayConfig.notify_url);//异步通知地址

            //商户订单号，商户网站订单系统中唯一订单号，必填
            //String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
            String out_trade_no = payBill.getOrderSn();
            //付款金额，必填
            String total_amount = payBill.getMoney().toString();
            //订单名称，必填
            String subject = payBill.getDigest();
            //商品描述，可空
            String body = payBill.getDigest();

            alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                    + "\"total_amount\":\""+ total_amount +"\","
                    + "\"subject\":\""+ subject +"\","
                    + "\"body\":\""+ body +"\","
                    + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

            //请求
             String result  = alipayClient.pageExecute(alipayRequest).getBody();
             return  result;
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
}
